home *** CD-ROM | disk | FTP | other *** search
- /*
- * tmem.c -- memory initialization and allocation for the translator.
- */
-
- #include "../h/config.h"
- #include "general.h"
- #include "tproto.h"
- #include "globals.h"
- #include "trans.h"
- #include "../h/memsize.h"
- #include "tsym.h"
- #include "tree.h"
-
- struct tlentry **lhash; /* hash area for local table */
- struct tgentry **ghash; /* hash area for global table */
- struct tcentry **chash; /* hash area for constant table */
- struct tientry **ihash; /* hash area for identifier table */
-
- nodeptr tree; /* parse tree space */
- nodeptr tend; /* end of parse tree space */
- struct tlentry *ltable; /* local table */
- struct tgentry *gtable; /* global table */
- struct tcentry *ctable; /* constant table */
- struct tientry *itable; /* identifier table */
-
- char *strings; /* string space */
- char *stre; /* end of string space */
-
- nodeptr tfree; /* free pointer for parse tree space */
- struct tlentry *lfree; /* free pointer for local table */
- struct tgentry *gfree; /* free pointer for global table */
- struct tcentry *ctfree; /* free pointer to constant table */
- struct tientry *ifree; /* free pointer for identifier table */
- char *strf; /* free pointer for string space */
-
-
- /*
- * tmalloc - allocate memory for the translator
- */
-
- novalue tmalloc()
- {
- chash = (struct tcentry **) tcalloc(chsize, sizeof (struct tcentry *));
- ghash = (struct tgentry **) tcalloc(ghsize, sizeof (struct tgentry *));
- ihash = (struct tientry **) tcalloc(ihsize, sizeof (struct tientry *));
- lhash = (struct tlentry **) tcalloc(lhsize, sizeof (struct tlentry *));
-
- ctable = (struct tcentry *) tcalloc(csize, sizeof (struct tcentry));
- gtable = (struct tgentry *) tcalloc(gsize, sizeof (struct tgentry));
- itable = (struct tientry *) tcalloc(isize, sizeof (struct tientry));
- ltable = (struct tlentry *) tcalloc(lsize, sizeof (struct tlentry));
-
- strings = (char *) tcalloc(stsize, sizeof(char));
- stre = strings + stsize;
-
- tree = (nodeptr) tcalloc(tsize, sizeof(word));
- tend = (nodeptr) ((word *)tree + tsize);
- }
-
- /*
- * meminit - clear tables for use in translating the next file
- */
- novalue tminit()
- {
- register struct tlentry **lp;
- register struct tgentry **gp;
- register struct tcentry **cp;
- register struct tientry **ip;
-
- /*
- * Reset the free pointer for each region.
- */
- lfree = ltable;
- gfree = gtable;
- ctfree = ctable;
- ifree = itable;
- strf = strings;
- tfree = tree;
- /*
- * Zero out the hash tables.
- */
- for (lp = lhash; lp < &lhash[lhsize]; lp++)
- *lp = NULL;
- for (gp = ghash; gp < &ghash[ghsize]; gp++)
- *gp = NULL;
- for (cp = chash; cp < &chash[chsize]; cp++)
- *cp = NULL;
- for (ip = ihash; ip < &ihash[ihsize]; ip++)
- *ip = NULL;
- }
-
- /*
- * tmfree - free memory used by the translator
- */
- novalue tmfree()
- {
- free((char *) chash); chash = NULL;
- free((char *) ghash); ghash = NULL;
- free((char *) ihash); ihash = NULL;
- free((char *) lhash); lhash = NULL;
- free((char *) ctable); ctable = NULL;
- free((char *) gtable); gtable = NULL;
- free((char *) itable); itable = NULL;
- free((char *) ltable); ltable = NULL;
- free((char *) strings); strings = NULL;
- free((char *) tree); tree = NULL;
- }
-